package ${mapperPackage};
#parse("/template/func.vm")
#set ($className =  $table.className)
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Repository;

import ${comonPath}.common.persistence.annotation.MyBatisDao;

import ${criteria};
import ${entityPackage}.${className};

/** 
 * @ClassName: ${className}Mapper
 * @Description:${table.tableName}表对应的dao操作Mapper映射类
 * @version:v1.0.0
 * @author: $author
 * @date:$now
 * @Copyright $copyright
 */

@Repository
@MyBatisDao
public interface ${className}Dao {
    /**
    * @Title ${className}Dao.countByExample
    * @Description: 根据查询条件，计算${table.tableName}记录个数
    * @param example 通用查询条件类
    * @return int 结果个数
     */
    int countByExample(Criteria example);

    /**
    * @Title ${className}Dao.insert
    * @Description: 插入一个${table.tableName}
    * @param record ${table.tableName}的bean对象
    * @return int  插入个数
     */
    int insert(${className} record);

    /**
    * @Title ${className}Dao.insertSelective
    * @Description: 插入一个只有部分字段的${table.tableName}
    * @param record 只含部分字段的${table.tableName}的bean对象
    * @return int  插入个数
     */
    int insertSelective(${className} record);

    /**
     * @Title ${className}Dao.deleteByExample
     * @Description: 根据查询条件，删除${table.tableName}
     * @param example 通用查询条件类
     * @return int 删除个数
     */
    int deleteByExample(Criteria example);

    /**
     * @Title ${className}Dao.deleteByPrimaryKey
     * @Description: 根据主键 id删除${table.tableName}
     * @param #ID_NAME 主键
     * @return int  删除个数
     */
    int deleteByPrimaryKey(#ID_TYPE_NAME);

    /**
    * @Title ${className}Dao.updateByExample
    * @Description: 根据查询条件更新${table.tableName}全表字段
    * @param record 要更新成为的${className}对象
    * @param criteria 更新记录的查询条件
    * @return int 更新记录数
     */
    int updateByExample(@Param("record") ${className} record, @Param("example") Criteria criteria);

    /**
    * @Title ${className}Dao.updateByPrimaryKey
    * @Description: 根据主键更新${table.tableName}全部字段
    * @param record 要更新成为的${className}对象
    * @return int 更新记录数
     */
    int updateByPrimaryKey(${className} record);
    
    /**
    * @Title ${className}Dao.updateSelectiveByPrimaryKey
    * @Description: 根据主键更新${table.tableName}部分字段
    * @param record 要更新成为的${className}对象
    * @return int 更新记录数
     */
    int updateSelectiveByPrimaryKey(${className} record);
    
    /**
    * @Title ${className}Dao.updateSelectiveByExample
    * @Description: 根据查询条件更新${table.tableName}部分字段
    * @param record 要更新成为的${className}对象
    * @param criteria 更新记录的查询条件
    * @return int 更新记录数
     */
    int updateSelectiveByExample(@Param("record") ${className} record, @Param("example") Criteria criteria);

    /**
     * @Title ProductDao.selectByExample
     * @Description: 根据查询条件类，返回${table.tableName}结果集
     * @param example 通用查询条件类
     * @return List<${className}>${table.tableName}结果集
     */
    List<${className}> selectByExample(Criteria example);

    /**
     * @Title ${className}Dao.selectByPrimaryKey
     * @Description: 根据主键类，返回${table.tableName}
     * @param #ID_NAME 主键
     * @return ${className} ${table.tableName}对象
     */
    ${className} selectByPrimaryKey(#ID_TYPE_NAME);
    
    /**
     * @Title ${className}Dao.queryInfoByMap
     * @Description: 根据条件类，返回${table.tableName}  自定义
     * @return ${className} List 对象
     */
    List<Map<String,String>> queryInfoByMap(Map<String, Object> map,RowBounds rowBounds);
    /**
     * @Title ${className}Dao.countInfoByMap
     * @Description: 根据条件类，返回${table.tableName}  自定义
     * @return ${className} int  对象总记录数
     */
    int countInfoByMap(Map<String,Object> map);
	
}